package DAO;

import Util.ConnectionUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Pessoas;

public class PessoasDAO {

    private Connection con;

    public PessoasDAO() throws Exception {
        con = ConnectionUtil.getConn();
    }

    public boolean insert(Pessoas item) throws SQLException {
        String SQL = "INSERT INTO PESSOAS VALUES (?,?,?,?,?,?)";
        PreparedStatement stmt = con.prepareStatement(SQL);
        stmt.setInt(1, item.getCodigo());
        stmt.setString(2, item.getNome());
        stmt.setBoolean(3, item.isStatus());
        stmt.setString(4, item.getEmail());
        stmt.setString(5, item.getLogin());
        stmt.setString(6, item.getSenha());
        return stmt.execute();
    }

    public void delete(int codigo) throws SQLException {
        String SQL = "DELETE FROM PESSOAS WHERE PES_CODIGO = ?";
        PreparedStatement stmt = con.prepareStatement(SQL);
        stmt.setInt(1, codigo);
        stmt.execute();
    }

    public boolean update(Pessoas item) throws SQLException {
        String SQL = "UPDATE PESSOAS SET PES_NOME = ?, PES_STATUS = ?, PES_EMAIL = ?, PES_LOGIN = ?, PES_SENHA = ? WHERE PES_CODIGO = ?";
        PreparedStatement stmt = con.prepareStatement(SQL);
        stmt.setString(1, item.getNome());
        stmt.setBoolean(2, item.isStatus());
        stmt.setString(3, item.getEmail());
        stmt.setString(4, item.getLogin());
        stmt.setString(5, item.getSenha());
        stmt.setInt(6, item.getCodigo());
        return stmt.execute();
    }

    public Pessoas findByCodigo(int codigo) throws Exception {
        String SQL = "SELECT PES_CODIGO, PES_NOME, PES_STATUS, PES_EMAIL, PES_LOGIN, PES_SENHA FROM PESSOAS WHERE PES_CODIGO = ?";
        PreparedStatement p = con.prepareStatement(SQL);
        p.setInt(1, codigo);

        ResultSet rs = p.executeQuery();

        if (rs.next()) {
            Pessoas pes = new Pessoas();
            pes.setCodigo(rs.getInt("PES_CODIGO"));
            pes.setNome(rs.getString("PES_NOME"));
            pes.setStatus(rs.getBoolean("PES_STATUS"));
            pes.setEmail(rs.getString("PES_EMAIL"));
            pes.setLogin(rs.getString("PES_LOGIN"));
            pes.setSenha(rs.getString("PES_SENHA"));
            return pes;

        } else {
            return null;
        }
    }

    public List<Pessoas> findByNome(String nome) throws Exception {
        String SQL = "SELECT PES_CODIGO, PES_NOME, PES_STATUS, PES_EMAIL, PES_LOGIN, PES_SENHA FROM PESSOAS WHERE PES_NOME LIKE ?";
        PreparedStatement p = con.prepareStatement(SQL);
        p.setString(1, "%"+nome+"%");

        ResultSet rs = p.executeQuery();
        List<Pessoas> lsPessoas = new ArrayList<>();
        while (rs.next()) {
            Pessoas pes = new Pessoas();
            pes.setCodigo(rs.getInt("PES_CODIGO"));
            pes.setNome(rs.getString("PES_NOME"));
            pes.setStatus(rs.getBoolean("PES_STATUS"));
            pes.setEmail(rs.getString("PES_EMAIL"));
            pes.setLogin(rs.getString("PES_LOGIN"));
            pes.setSenha(rs.getString("PES_SENHA"));
            lsPessoas.add(pes);
        }
        return lsPessoas;
    }
    
    public List<Pessoas> findAll() throws SQLException {
        String SQL = "SELECT PES_CODIGO, PES_NOME, PES_STATUS, PES_EMAIL, PES_LOGIN, PES_SENHA FROM PESSOAS WHERE 1=1";
        PreparedStatement p = con.prepareStatement(SQL);

        ResultSet rs = p.executeQuery();
        List<Pessoas> lsPessoas = new ArrayList<>();
        while (rs.next()) {
            Pessoas pes = new Pessoas();
            pes.setCodigo(rs.getInt("PES_CODIGO"));
            pes.setNome(rs.getString("PES_NOME"));
            pes.setStatus(rs.getBoolean("PES_STATUS"));
            pes.setEmail(rs.getString("PES_EMAIL"));
            pes.setLogin(rs.getString("PES_LOGIN"));
            pes.setSenha(rs.getString("PES_SENHA"));
            lsPessoas.add(pes);
        }
        return lsPessoas;
    }

    public boolean Logar(String usuario, String senha) throws SQLException {
        String SQL = "SELECT PES_CODIGO FROM PESSOAS WHERE PES_LOGIN = ? AND PES_SENHA = ?";
        PreparedStatement p = con.prepareStatement(SQL);
        p.setString(1, usuario);
        p.setString(2, senha);
        ResultSet rs = p.executeQuery();
        if (rs.next()) {
            rs.first();
            if (rs.getInt("PES_CODIGO") > 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}